<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        事件循环机制 / 事件轮询机制 event loop

        概念：一个异步代码执行机制

        过程：
          JS主线程将全局所有代码依次执行，同步代码依次执行，异步代码：
            比如：定时器，JS主线程将定时器内容交给浏览器定时器管理模块（分线程）去管理，浏览器定时器管理模块负责计时，
            等计时到点会将回调函数添加到回调队列
            比如：DOM事件，JS主线程将DOM事件内容交给浏览器DOM事件管理模块（分线程）去管理，浏览器DOM事件管理模块负责绑定事件，
            等将来用户触发事件时，会将回调函数添加到回调队列
          主线程将异步代码的任务交给分线程去完成，就会继续执行剩下代码。直到主线程执行完全局所有代码，就会开启事件循环
          事件循环会轮询回调队列，依次取出回调函数，同步执行。直到所有回调函数执行完毕，等一段时间会再次访问回调队列，
          依次取出回调函数，同步执行。这个过程会一直进行。

        回调队列中分为：宏任务回调队列和微任务回调队列
          微任务回调队列：（高）
            promise.then/catch/finally()
            async&await
            MutationObserver

          宏任务回调队列：（低）
            setTimeout / setInterval
            DOM事件回调函数
            ajax回调函数
            setImmediate

        主线程先执行微任务队列中的回调函数，依次取出，同步执行。直到所有微任务全部执行完毕，才会取出第一个宏任务去执行，
        执行完宏任务，继续检查微任务回调队列是否有回调函数要执行，如果有就执行，直到所有微任务全部执行完毕，在执行下一个宏任务

        扩展：事件触发机制 - 捕获阶段 - 目标阶段 - 冒泡阶段
            Nodejs事件循环机制：https://nodejs.org/zh-cn/docs/guides/event-loop-timers-and-nexttick
      */
    </script>
    <script src="./01.question2.js"></script>
  </body>
</html>
